package com.ruoyi.pcj.service;

import java.util.List;
import java.util.Map;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.pcj.domain.PcjTarget;
import com.ruoyi.pcj.domain.PcjUserTarget;
import com.ruoyi.pcj.dto.match.MatchUserAttrDto;

/**
 * 用户-目标关系Service接口
 *
 * @author ms
 * @date 2024-03-11
 */
public interface IPcjUserTargetService {
    /**
     * 查询用户-目标关系
     *
     * @param id 用户-目标关系主键
     * @return 用户-目标关系
     */
    PcjUserTarget selectPcjUserTargetById(String id);

    /**
     * 分页查询用户-目标关系列表
     *
     * @param params 最基本参数{"pageNum":1,"pageSize":10}，其他参数自行定义
     * @return 用户-目标关系集合
     */
    IPage<PcjUserTarget> selectPcjUserTargetList(Map<String, Object> params);

    /**
     * 新增用户-目标关系
     *
     * @param pcjUserTarget 用户-目标关系
     * @return 结果
     */
    Boolean insertPcjUserTarget(PcjUserTarget pcjUserTarget);

    /**
     * 修改用户-目标关系
     *
     * @param pcjUserTarget 用户-目标关系
     * @return 结果
     */
    Boolean updatePcjUserTarget(PcjUserTarget pcjUserTarget);

    /**
     * 批量删除用户-目标关系
     *
     * @param ids 需要删除的用户-目标关系主键集合
     * @return 结果
     */
    Boolean deletePcjUserTargetByIds(String[] ids);

    List<PcjUserTarget> getUserTarget();

    /**
     * 对外提供的设置默认字段值，id为空新增，不为空更新
     **/
    void setEntityDefValAuto(PcjUserTarget pcjUserTarget);

    /**
     * 批量保存目标信息
     *
     * @param targetList
     */
    void batchSaveData(List<PcjUserTarget> targetList);


    /**
     * 获取用户目标信息
     *
     * @param targetIds key=用户id，value=用户目标集合
     **/
    Map<Long, List<PcjUserTarget>> getUserTargetData(List<String> targetIds);



    /**
     * 获取指定用户的目标id集合，包含了特殊目标想匹配的目标，根据目标顺序号排序
     *
     * @param userId       用户id
     * @param allTargetMap
     * @return
     */
    List<String> getUserTargetIds(Long userId, Map<String, PcjTarget> allTargetMap);

    /**
     * 获取与当前用户目标相同的用户信息
     *
     * @param userId         用户id
     * @param existFriendIds 当前用户已有的好友id
     * @param userTargetIds  当前用户的目标id集合
     * @return
     */
    List<MatchUserAttrDto> getEqualsTargetUserMsg(Long userId, List<Long> existFriendIds, List<String> userTargetIds);

    /***
     * 保存用户兴目标
     */
    void saveUserTarget(List<PcjUserTarget> list);

    /**
     * 找出当前匹配的所有目标信息
     * **/
    List<String> getCurUserTargetIds(Long userId, Map<String, PcjTarget> allTargetData);

    /**
     * 找出与当前匹配用户目标一致的用户id
     * */
    List<MatchUserAttrDto> getAccordTargetUserIds(List<Long> excludeFriendIds, List<String> curUserTargetIds);
}
